/**
|--------------------------------------------------
| 给定一个非空整数数组，除了某个元素只出现一次以外，
其余每个元素均出现两次。找出那个只出现了一次的元素。

说明：

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗？

输入: [2,2,1]
输出: 1
输入: [4,1,2,1,2]
输出: 4

|--------------------------------------------------
*/
// 思路
// 首先针对异或运算，这里做一个知识点的总结：

//     任何数和自己做异或运算，结果为 000，即 a⊕a=0a⊕a=0a⊕a=0 。
//     任何数和 000 做异或运算，结果还是自己，即 a⊕0=⊕a⊕0=⊕a⊕0=⊕。
//     异或运算中，满足交换律和结合律，也就是 a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=ba⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=ba⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b。
// 就是说当数组中1个数重复2次 那用异或运算会被清零
var singleNumber = function (nums) {
  let ans = 0;
  for (const num of nums) {
    ans ^= num; //[7,6,4]
  }
  return ans;
};
console.log('singleNumber', singleNumber([4, 1, 2, 1, 2]));
